//项目的亮点=> 像nuxt 一样自动化进行配置



//项目的难点=> 扁平路由转换换成树形

//require.context('路劲','是否递归引入','正则') 一次性导入多个模块
let files = require.context('@/pages',true,/\.vue$/)
console.log(files.keys())

//创建路由配置
//{path:'',component:''}
let repeatRoutes = files.keys().map(path=>{
 
    //通过正则，去掉index.vue  或者去掉.vue的后面
    let regExp = /(\/index\.vue|\.vue)$/
    
    //获取路径对应的每个.vue组件
    let currentComponent = files(path).default
    // console.log(currentComponent.meta)
    //解构组件export default 导出的对象中添加的属性
    let {meta,name,redirect} = currentComponent

    path = path.substring(1).replace(regExp,'')
    // console.log(path)
  
    return {
        path:path ? path : '/pages',
        //重定向，name属性，meta 路由元信息
        meta:meta ?? {},
        name:name ?? path.substring(1).split('/').join('-').toLowerCase(),
        redirect:redirect ?? null,
        component:()=>import('@/pages' + path)
    }
}) 
// console.log(repeatRoutes)

function convertTree(repeatRoutes){
    repeatRoutes=[...repeatRoutes]//浅拷贝
    let treeRoutes = []
    repeatRoutes.forEach(route => {
        //将路径去掉第一个/ 转换成一个数组
       let routePathArr = route.path.substring(1).split('/')
        console.log(routePathArr)
        //length为1 的都是根节点
        //需要添加id 和pid
        //正常添加id
        route.id = routePathArr.join('-')
        if(routePathArr.length>1){
            //浅拷贝routePathArr;
            let pathArr = [...routePathArr]
            pathArr.pop()
            let pid = pathArr.join('-')
            route.pid = pid //添加父节点id
        }
    });

    //转成树形数据
    repeatRoutes.forEach(route=>{
        //将所有的路径都变成小写 目的是为了和菜单的高亮效果绑定
        route.path = route.path.toLowerCase()
        //单独对page404额外处理
        if(route.path === '/page404'){
            route.path = "*"
        }
        //父亲在哪里
        let parent = repeatRoutes.find(v =>route.pid===v.id)
        if(parent){
            if(!parent.children){
                parent.children = []
            }
            route.path = route.path.substring(1).split('/').pop()
            parent.children.push(route)
        }else{
            treeRoutes.push(route)
        }
    })
    return treeRoutes

}
let res = convertTree(repeatRoutes)
// console.log(res)
export default [...res]